Text Classified with Logistic Regression

split data set
X_train=df.loc[:25000, 'review'].values
y_train=df.loc[:25000, 'sentiment'].values
X_test=df.loc[25000:, 'review'].values
y_test=df.loc[25000:, 'sentiment'].values
GridSearchCV 객체에서 5-겹 계층별 교차 검증을 사용하여 로지스틱 회귀 모델에 대한 최적의 매개변수 조합 찾기
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf=TfidfVectorizer(strip_accents=None, lowercase=False, preprocessor=None)
param_grid=[{'vect__ngram_range':[(1, 1)], 'vect__stop_words':[stop, None], 'vect__tokenizer':[tokenizer, tokenizer_porter], 'clf__penalty':['l1', 'l2'
], 'clf__C':[1.0, 10.0, 100.0]}, {'vect__ngram_range':[(1, 1)], 'vect__stop_words':[stop, None], 'vect__tokenizer':[tokenizer, tokenizer_porter], 'vect__use_idf':[False], 'vect__norm':[None], 'clf__penalty':['l1', 'l2'], 'clf__C':[1.0, 10.0, 100.0]}]
lr_tfidf=Pipeline([('vect', tfidf), ('clf', LogisticRegression(solver='liblinear', random_state=0))])
gs_lr_tfidf=GridSearchCV(lr_tfidf, param_grid, scoring='accuracy', cv=5, verbose=1, n_jobs=-1)
gs_lr_tfidf.fit(X_train, y_train)
param_grid는 2개의 딕셔너리로 구성되어 있다.

첫 번째 딕셔너리는 TfidfVectorizer의 기본 매개변수 셋팅(use_idf=True, norm=‘l2’)를 사용해서 tf-idf를 계산한다.
단어 빈도를 사용하여 모델을 훈련시키기 위해 use_idf=False, norm=None으로 지정

로지스틱 회귀 분류기는 penalty 매개변수를 통해서 L1, L2 규제를 적용하고 규제 매개변수 C에 여러 값을 지정해서
규제 강도를 비교한다.
print(' : %s ' %gs_lr_tfidf.best_params_)

최적의 매개변수 조합: {'clf__C': 10.0, 'clf__penalty': 'l2', 'vect__ngram_range': (1, 1), 'vect__stop_words': None, 'vect__tokenizer': <function tokenizer at 0x7f9da0585e50>} 

계산 결과 포터 어간 추출을 하지 않은 tokenizer 함수와 tf-idf를 사용하고 불용어 제거는 사용하지 않는 경우
로지스틱 회귀 분류기의 L2 규제를 사용하고, C의 값은 10.0일 떼 최상의 그리드 서치 결과를 얻었다.
최상의 모델을 사용하여 훈련 데이터셋세 대한 모델의 5-겹 교차 검증 정확도와 테스트 데이터셋에 대한 분류 정확도
print('CV : %.3f' %gs_lr_tfidf.best_score_)
clf=gs_lr_tfidf.best_estimator_
print(' : %.3f' %clf.score(X_test, y_test))

CV 정확도: 0.895

테스트 정확도: 0.899

결과를 통해 머신 러닝 모델이 영화 리뷰가 긍정인지 부정인지 89.9% 정확도로 예측하리라 기대할 수 있다.
나이브 베이즈 분류기(Naive Bayes)
텍스트 분류기에서 인기 있는 알고리즘으로 이메일 스팸 필터링에 적용되어 큰 인기를 얻었다.
나이브 베이즈 분류기는 구현하기 쉽고 계산 비용이 크지 않으면서, 다른 알고리즘에 비해 비교적 작은 데이터셋에 잘 동작한다.